﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PandemiaAdmin.Soporte;
using System.ServiceModel;
using System.Security.Cryptography;
using PandemiaAdmin.Entidades;
using PandemiaAdmin.Transferencia;

namespace PandemiaAdmin.Funcionalidad
{
    public class Admin
    {
        protected SoporteServiceClient ObtenerCliente(Servidor servidor)
        {
            SoporteServiceClient cliente = new SoporteServiceClient();
            cliente.Endpoint.Address = new EndpointAddress(servidor.SoporteURL);

            return cliente;
        }

        protected SoporteServiceClient GenerarTokenYCliente(Servidor servidor, out string token)
        {
            string año = DateTime.Now.Year.ToString();
            string mes = DateTime.Now.Month.ToString();
            string dia = DateTime.Now.Day.ToString();
            string hora = DateTime.Now.Hour.ToString();
            string minuto = DateTime.Now.Minute.ToString();
            string segundo = DateTime.Now.Second.ToString();
            string tokenDesencriptado = servidor.Clave + año + "-" + mes + "-" + dia + "-" + hora + "-" + minuto + "-" + segundo;

            SoporteServiceClient cliente = ObtenerCliente(servidor);
            string clavePublica = cliente.ObtenerClavePublica();
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
            rsa.FromXmlString(clavePublica);
            byte[] encriptado = rsa.Encrypt(Encoding.ASCII.GetBytes(tokenDesencriptado), true);
            token = Convert.ToBase64String(encriptado);
            
            return cliente;
        }

        protected TransferenciaServiceClient GenerarTokenYClienteTransferencia(Servidor servidor, out string token)
        {
            GenerarTokenYCliente(servidor,out token);

            TransferenciaServiceClient cliente = new TransferenciaServiceClient();
            cliente.Endpoint.Address = new EndpointAddress(servidor.TransferenciaURL);

            return cliente;
        }
    }
}
